#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>

#include "stack.h"

//创建
StackArray* createStackArray(size_t len)
{
    StackArray *stack = malloc(sizeof(StackArray));
    stack->base = malloc(sizeof(TYPE) * len);
    stack->len = len;
    stack->top = 0;
    return stack;
}
//销毁
void destoryStackArray(StackArray* stack)
{
    free(stack->base);
    free(stack);
}
//判断是否栈满
bool fullStackArray(StackArray* stack)
{
    return stack->top >= stack->len;
}
//判断是否栈空
bool emptyStackArray(StackArray* stack)
{
    return stack->top == 0;
}
//入栈
bool pushStackArray(StackArray* stack,TYPE val)
{
    if(fullStackArray(stack))
        return false;
    stack->base[stack->top] = val;
    stack->top++;
    return true;
}
//出栈
bool popStackArray(StackArray* stack)
{
    if(emptyStackArray(stack))
        return false;
    stack->top--;
    return true;
}
//查看栈顶
TYPE topStackArray(StackArray* stack)
{
    return stack->base[stack->top - 1];
}

//栈中元素数量
size_t sizeStackArray(StackArray *stack)
{
    return stack->top;
}

//判断另一个序列是否是出栈顺序
bool isPopOrder(int *arr1,int *arr2,size_t len)
{
    StackArray *s = createStackArray(len);
    for(int i = 0,j = 0; i < len; i++)
    {
        while(j < len && !emptyStackArray(s) && topStackArray(s) == arr2[j])
        {
            popStackArray(s);
            j++;
        }
    }
    bool f = emptyStackArray(s);
    destoryStackArray(s);
    return f;
}
